/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.tnova.library.util.security;

import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

import javax.crypto.BadPaddingException;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;

/**
 * @author Danielle Delgado
 *
 */
public final class SecurityUtil {

	private SecurityUtil() {

	}

	/**
	 * Metodo utilizado para encriptar un valor con el metodo BlowFish
	 * 
	 * @param valor
	 *            Valor a encriptar
	 * @param clave
	 *            Clave para encriptar
	 * @return Un String con el valor encriptado
	 * @throws NoSuchPaddingException 
	 * @throws NoSuchAlgorithmException 
	 * @throws BadPaddingException 
	 * @throws IllegalBlockSizeException 
	 * @throws UnsupportedEncodingException 
	 * @throws InvalidKeyException 
	 * @throws Exception
	 */
	public static String encriptarBlowFish(String valor, String clave) throws InvalidKeyException, UnsupportedEncodingException, IllegalBlockSizeException, BadPaddingException, NoSuchAlgorithmException, NoSuchPaddingException{
		return BlowFish.encriptar(valor, clave);
	}

	/**
	 * Metodo utilizado para desencriptar un valor con el metodo BlowFish
	 * 
	 * @param valor
	 *            Valor a desencriptar
	 * @param clave
	 *            Clave para desencriptar
	 * @return Un String con el valor desencriptado
	 * @throws BadPaddingException 
	 * @throws IllegalBlockSizeException 
	 * @throws NoSuchPaddingException 
	 * @throws NoSuchAlgorithmException 
	 * @throws UnsupportedEncodingException 
	 * @throws InvalidKeyException 
	 * @throws Exception
	 */
	public static String desencriptarBlowFish(String valor, String clave) throws InvalidKeyException, UnsupportedEncodingException, NoSuchAlgorithmException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException {
		return BlowFish.desEncriptar(valor, clave);
	}

	/**
	 * Metodo utilizado para encriptar un valor con el metodo MD5
	 * @param texto Valor a encriptar
	 * @return Un String con el valor encriptado
	 * @throws NoSuchAlgorithmException 
	 * @throws Exception
	 */

	public static String encriptarMd5(String valor) throws NoSuchAlgorithmException {
		MessageDigest md = MessageDigest.getInstance("MD5");
		byte[] b = md.digest(valor.getBytes());

		int size = b.length;
		StringBuffer h = new StringBuffer(size);
		for (int i = 0; i < size; i++) {
			int u = b[i] & 255;
			if (u < 16) {
				h.append("0" + Integer.toHexString(u));
			} else {
				h.append(Integer.toHexString(u));
			}
		}
		return h.toString();
	}
}
